package controller

import (
	"lzppp/internal/app/model"
	"lzppp/internal/app/service"
	"net/http"

	"lzppp/internal/app/response"

	"github.com/gin-gonic/gin"
)

// GetUsers godoc
// @Summary 获取全部用户列表
// @Tags 用户管理
// @Accept json
// @Produce json
// @Router /user/list [get]
func GetUsers(c *gin.Context) {
	users, err := service.ListUsers()
	if err != nil {
		c.JSON(http.StatusInternalServerError, response.Error(err.Error()))
		return
	}
	c.JSON(http.StatusOK, response.Data(users))
}

// GetUsersByName godoc
// @Summary      获取用户列表
// @Description  可选 name 查询用户
// @Tags         用户管理
// @Accept       json
// @Produce      json
// @Param        name  query     string  false  "用户名"
// @Success      200  {object}  response.R
// @Failure      400  {object}  response.R
// @Router       /user/users-name [get]
func GetUsersByName(c *gin.Context) {

	name := c.Query("name")

	users, err := service.ListUsersByName(name)
	if err != nil {
		c.JSON(http.StatusInternalServerError, response.Error(err.Error()))
		return
	}

	c.JSON(http.StatusOK, response.Data(users))
}

// CreateUser godoc
// @Summary      添加用户
// @Description  添加用户
// @Tags         用户管理
// @Accept       json
// @Produce      json
// @Param        userReq  body      model.CreateUserRequest  true  "用户信息"
// @Success      200   {object}  response.R
// @Failure      400   {object}  response.R
// @Router       /user/create [post]
func CreateUser(c *gin.Context) {
	var user model.User

	if err := c.ShouldBindJSON(&user); err != nil {
		c.JSON(http.StatusBadRequest, response.Error(err.Error()))
		return
	}
	if err := service.CreateUser(&user); err != nil {
		c.JSON(http.StatusInternalServerError, response.Error(err.Error()))
		return
	}
	c.JSON(http.StatusOK, response.Success())
}
